package com.ai.cltcore.service.common;

import java.util.Map;

import com.ai.cltcore.util.DedicException;

/**
 * Cache服务接口
 */
public interface ICacheService {

	/**
	 * 放入缓存,永久生效
	 * 
	 * @param cacheKey
	 *            缓存key值
	 * @param value
	 *            缓存的value值
	 * @throws DedicException
	 * @ReturnType true=成功
	 */
	public boolean put2Cache(String cacheKey, String value) throws DedicException;

	/**
	 * 放入缓存,并设置生效时间
	 * 
	 * @param cacheKey
	 *            缓存的key值
	 * @param value
	 *            缓存的value值
	 * @param seconds
	 *            失效时间(单位秒)
	 * @ReturnType true=成功
	 */
	public boolean put2Cache(String cacheKey, String value, int seconds) throws DedicException;

	/**
	 * 从缓存中获取信息
	 * 
	 * @param cacheKey
	 *            缓存的key值
	 * @return 根据cacheKey取到的值
	 * @throws DedicException
	 * @ReturnType String
	 */
	public String getFromCache(String cacheKey) throws DedicException;

	/**
	 * 递增序列
	 * 
	 * @param cacheKey
	 *            缓存的key值
	 * @return
	 * @throws DedicException
	 * @ReturnType long
	 */
	public long incr(String cacheKey) throws DedicException;

	/**
	 * 递减序列
	 * 
	 * @param cacheKey
	 *            缓存的key值
	 * @return
	 * @throws DedicException
	 * @ReturnType long
	 */
	public long decr(String cacheKey) throws DedicException;

	/**
	 * 将Map放入缓存
	 * 
	 * @param cacheKey
	 *            缓存的key值
	 * @param map
	 *            待放入的值
	 * @return "OK" 成功
	 * @throws DedicException
	 */
	public String putMap(String cacheKey, Map<String, String> map) throws DedicException;

	/**
	 * 从缓存中读取map
	 * 
	 * @param cacheKey
	 *            缓存的key值
	 * @return 如果存在key值，则返回Map对象，如果不存在，则返回null
	 * @throws DedicException
	 */
	public Map<String, String> getMap(String cacheKey) throws DedicException;

	/**
	 * 进栈、入队  (可以把堆栈看作是一个从左至右的数组。如果左边压栈，右边出栈，那就是队列的入队/出队操作；如果左边压栈，左边出栈，那就是堆栈操作。)
	 * 
	 * @param key
	 *            缓存的key值
	 * @param values
	 *            push的值
	 * @return 存放的条数
	 * @throws DedicException
	 */
	public Long lpush(String key, String... values) throws DedicException;

	/**
	 * 出栈    (可以把堆栈看作是一个从左至右的数组。如果左边压栈，右边出栈，那就是队列的入队/出队操作；如果左边压栈，左边出栈，那就是堆栈操作。)
	 * 
	 * @param key
	 *            缓存的key值
	 * @param values
	 *            push的值
	 * @return 存放的条数
	 * @throws DedicException
	 */
	public String lpop(String key) throws DedicException;
	
	/**
	 * 出队       (可以把堆栈看作是一个从左至右的数组。如果左边压栈，右边出栈，那就是队列的入队/出队操作；如果左边压栈，左边出栈，那就是堆栈操作。)
	 * 
	 * @param key
	 *            缓存的key值
	 * @param values
	 *            push的值
	 * @return 存放的条数
	 * @throws DedicException
	 */
	public String rpop(String key) throws DedicException;
	
	/**
	 * 根据key从缓存中删除
	 * @param cacheKey
	 * @return
	 * @throws DedicException
	 */
	public void delFromCache(String cacheKey) throws DedicException;

	/**
	* @author 黄承文
	* @Title: hget
	* @Description: 获取hash
	* @param @param key
	* @param @param field
	* @param @return
	* @param @throws DedicException    设定文件
	* @return String    返回类型
	* @throws
	*/
	public String hget(String key, String field) throws DedicException;

	/**
	* @author 黄承文
	* @Title: hdel
	* @Description: 删除hash
	* @param @param key
	* @param @param field
	* @param @throws DedicException    设定文件
	* @return void    返回类型
	* @throws
	*/
	public void hdel(String key, String field) throws DedicException;

	/**
	* @author 黄承文
	* @Title: hset
	* @Description:设置hash
	* @param @param key
	* @param @param field
	* @param @param value
	* @param @throws DedicException    设定文件
	* @return void    返回类型
	* @throws
	*/
	public void hset(String key, String field, String value) throws DedicException;

	/**
	* @author 黄承文
	* @Title: expire
	* @Description: 设置超时时间
	* @param @param key
	* @param @param seconds
	* @param @throws DedicException    设定文件
	* @return void    返回类型
	* @throws
	*/
	public void expire(String key, int seconds) throws DedicException;  
}
